iT邦幫忙

2021 iThome 鐵人賽

DAY 23
1
自我挑戰組

Python 30天自我挑戰系列 第 23

Day23 - 使用Django-allauth整合社群登入

  • 分享至 

  • xImage
  •  

今天的實作內容主要根據網路資源進行。

Django並沒有提供官方的社群登入整合模組,在第三方套件上,django-allauth和python social auth是兩個最常被使用的套件,這兩種套件都支援了50種以上的社群登入,能符合絕大部分使用者的需求。因在網路上比較容易找到前者的教材,故今天將使用django-auth這個套件。

執行流程如下:

  1. 安裝套件
  2. 環境設定
  3. 設定OAuth Client ID和Secret
  4. 修改template

安裝套件

pip install django-allauth

環境設定

settings.py

INSTALLED_APPS = [
    'django.contrib.sites',
    # 3rd party
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    # social provider
    'allauth.socialaccount.providers.google',
]

  • django.contrib.sites:為allauth官方文件要求安裝。

  • 'allauth', 'allauth.account', 'allauth.socialaccount':allauth的核心模組

  • 'allauth.socialaccount.providers.google':依欲使用的社群軟體添加provider

# social_app/settings.py
AUTHENTICATION_BACKENDS = (
    "allauth.account.auth_backends.AuthenticationBackend",
)
SITE_ID = 1
ACCOUNT_EMAIL_VERIFICATION = "none"
ACCOUNT_LOGOUT_ON_GET = True
# Redirect to home URL after login (Default redirects to /accounts/profile/)
LOGIN_REDIRECT_URL = '/'
  • SITE_ID = 1:看了幾篇教學,並沒有很明確的說明SITE_ID的用途,但根據Django官方文件,應該是django.contrib.sites本身須使用。當環境有多個site的時候需要做設定,SITE_ID可以至Database確認:
select * from database.django_site
  • AUTHENTICATION_BACKENDS:背端驗證機制,這邊使用allauth做身分認證

  • ACCOUNT_EMAIL_VERIFICATION:是否需驗證email

  • ACCOUNT_LOGOUT_ON_GET:是否可使用GET Request進行登出 (透過登出按鈕送出GET,則可以省略登出頁面)

urls.py

urlpatterns += [
    path('accounts/', include('allauth.urls')),
] 

#urlpatterns += [
#    path('accounts/', include('django.contrib.auth.urls')),
#]

加入allauth.urls,昨天練習使用的django.contrib.auth.urls可以先註解掉。

資料庫更新

python manage.py makemigrations
python manage.py migrate

設定OAuth Key

申請OAuth Client ID和Secret

想要使用社群登入,須至該社群軟體取得client id和secret使用。 (具體流程網路上有很多教學,就不另外說明)

設定

啟動網站,登入管理員網站 (http://127.0.0.1:8000/admin/),新增Social Application。
https://ithelp.ithome.com.tw/upload/images/20211005/20141886DUgKI8U5w3.png

https://ithelp.ithome.com.tw/upload/images/20211005/20141886xcf2PZtDEN.png

修改template

base_generic.html

因為現在身份驗證已改用allauth套件進行,配合allauth.urls設定,需更新基礎樣板中左側sidebar的登入與登出連結。

          {% if user.is_authenticated %}
          <li>User: {{ user.first_name }} {{ user.last_name }}</li>
          <li><a href="{% url 'account_logout' %}">Logout</a></li>
          {% else %}
          <li><a href="{% url 'account_login' %}">Login</a></li>
          {% endif %}

allauth預設樣板

完成以上動作後,點了登入或登出,會連結至allauth提供的預設畫面。

如有畫面客製化需求,可至python安裝套件的位置,將allauth底下的整個templates資料夾(Lib\site-packages\allauth\templates) 複製到專案資料夾下,再修改樣板即可。

https://ithelp.ithome.com.tw/upload/images/20211005/20141886G3PvAsIjr8.png


上一篇
Day22 - 使用者身份驗證
下一篇
Day24 - 權限控制
系列文
Python 30天自我挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言